Micron Document
πŸŽ–οΈGitΠ―Ρ€Π°πŸŽ–οΈ

Node / reticulum / rsReticulum rns://bfb3becae4b7568796ac5276b6bc5741/reticulum/rsReticulum


A Rust implementation of Reticulum


-─
<div align="center">

rsReticulum

A Rust implementation of Reticulum.


![Rust 1.85+](https://www.rust-lang.org)
![Reticulum 1.2.4](https://reticulum.network/)
![Status](#feature-status)


</div>


rsReticulum is a Rust implementation of Reticulum. This is not a fork of
Reticulum; it is Reticulum written in a different language, focused on staying
interoperable. It is not the source-of-truth implementation, do not treat it as one.

Commands are intentionally namespaced for Rust with T383838*-rs command names, so
rsReticulum can live beside other Reticulum tools on T383838PATH without worry.

Contents

β€’ Build It
β€’ Tool Usage
β€’ Configuration
β€’ Contributing
β€’ License

Build It

macOS

Install Rust with T383838rustup, then install Apple's command-line build tools:

T282828
xcode-select --install

Build the tools:

T282828
Tffa657cd rsReticulum
cargo build --release


Linux, Raspberry Pi, and VPS Hosts

Install Rust with T383838rustup, then install the needed packages:

Debian, Ubuntu, and Raspberry Pi OS:

T282828
sudo apt update
sudo apt install -y build-essential pkg-config libudev-dev

Fedora:

T282828
sudo dnf install gcc make pkgconf-pkg-config systemd-devel

Arch:

T282828
sudo pacman -S --needed base-devel pkgconf systemd

Build the tools:

T282828
Tffa657cd rsReticulum
cargo build --release


Windows

Install Rust with the MSVC toolchain. If Rust or Cargo asks for Visual Studio
Build Tools, install the "Desktop development with C++" workload.

Build from PowerShell:

T282828
Tffa657cd Te6edf3rsReticulum
Te6edf3cargo Te6edf3build Tb4b4b4-Te6edf3-release


After the build, use the commands below with T383838./target/release/<tool> on
macOS/Linux or T383838.\target\release\<tool>.exe on Windows.

Tool Usage

The T383838rns-tools crate builds Rust-namespaced Reticulum utilities:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Binary β”‚ Purpose β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ rnsd-rs β”‚ Shared Reticulum daemon. Owns interfaces and local control sockets. β”‚
β”‚ rnstatus-rs β”‚ Interface, announce, path, link, and aggregate status. β”‚
β”‚ rnpath-rs β”‚ Path lookup, path table inspection, rates, drops, and blackhole actions. β”‚
β”‚ rnid-rs β”‚ Identity generation, inspection, public/private import/export, hashing, signing,… β”‚
β”‚ rnprobe-rs β”‚ Destination probe utility with loss and round-trip reporting. β”‚
β”‚ rncp-rs β”‚ File transfer utility with send, listen, and authenticated fetch modes. β”‚
β”‚ rnodeconf-rs β”‚ RNode inspection, safe configuration, EEPROM backup, and trust utility. β”‚
β”‚ rnsh-rs β”‚ Reticulum shell listener/client. β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Commands:

T282828
rnsd-rs [-c CONFIG_DIR] [-v|-q]... [--service] [--exampleconfig] [--version]
rnstatus-rs [--all] [--sort rate|traffic|rx|tx|rxs|txs|announces|arx|atx|held]
[--reverse] [--announce-stats] [--link-stats] [--totals] [--json]
[--discovered|-D] [-m [-I SECONDS]] [FILTER]
[-R <transport_hash> -i <identity_file>]
rnpath-rs [--table|--rates] [destination_hash] [--max HOPS]
rnpath-rs <destination_hash>
rnprobe-rs [-s SIZE] [-n COUNT] [-t TIMEOUT] [-w WAIT] [--json] <destination_hash>
rnid-rs [-i IDENTITY|-g FILE|-m PUB|-M PRV] [-p|-P] [-x|-X] [-H ASPECT]
[-a [ASPECT]] [-e FILE|-d FILE|-s FILE|-V FILE] [-w FILE] [-f]
[-R|-N] [-t SECONDS] [-b|-B] [--raw] [--version]
rncp-rs <file> <destination_hash>
rncp-rs -l [-b SECONDS] [-s DEST_DIR] [-a <allowed_hash>]...
rncp-rs -l -F [-j <jail_dir>] [-a <allowed_hash>|-n]...
rncp-rs -f <destination_hash> <remote_path> [-s DEST_DIR]

Add the release T383838bin/ directory or T383838target/release to T383838PATH if
you want to call them without a path prefix.

T383838rncp-rs follows the established listener authentication model: without T383838-n,
incoming senders must match T383838-a <hash> or an T383838allowed_identities file.
T383838rncp-rs -F can serve fetch requests to authenticated clients; use
T383838-j <jail> to bound file access unless unrestricted fetch paths are
intentional.

T383838rnodeconf-rs in the current build only covers safe inspection/device setting paths, EEPROM
dump/backup, and trusted-key storage.

T383838rnid-rs tracks the Reticulum 1.2.4 identity utility surface for normal
software identities: public/private import and export, destination hashing,
T383838.pub public identity files, and signed T383838.rsg signature files. The
hardware-backed T383838rnid-rs hw path is a Rust extension behind the T383838hardware
feature and should still be treated as experimental.

Common T383838rnid-rs flows:

T282828
T8b949e# Generate and inspect an identity.
rnid-rs -g ~/.rsReticulum/identities/mgmt
rnid-rs -i ~/.rsReticulum/identities/mgmt -p
rnid-rs -i ~/.rsReticulum/identities/mgmt -H lxmf.delivery

T8b949e# Export text identity material. -x is public, -X is private.
rnid-rs -i ~/.rsReticulum/identities/mgmt -x -b
rnid-rs -i ~/.rsReticulum/identities/mgmt -X -B

T8b949e# Write identity files. Without -X, -w writes a public .pub file.
rnid-rs -i ~/.rsReticulum/identities/mgmt -w mgmt.pub
rnid-rs -i ~/.rsReticulum/identities/mgmt -X -w mgmt.rid
rnid-rs -m <public_identity_data> -w peer.pub
rnid-rs -M <private_identity_data> -X -w restored_identity

T8b949e# Sign and validate. New signatures are Reticulum 1.2.4 .rsg envelopes.
rnid-rs -i ~/.rsReticulum/identities/mgmt -s message.txt
rnid-rs -V message.txt.rsg
rnid-rs -i <signer_hash> -N -V message.txt.rsg

T8b949e# Encrypt to a public identity, decrypt with the matching private identity.
rnid-rs -i mgmt.pub -e message.txt
rnid-rs -i ~/.rsReticulum/identities/mgmt -d message.txt.rfe


Use T383838--raw -s <file> only when a workflow intentionally needs the legacy raw
64-byte signature form. Normal T383838rnid-rs -s <file> produces a T383838.rsg file that
embeds the signer metadata needed for 1.2.4 validation.

Configuration

T383838rnsd-rs reads Reticulum INI config from T383838<config-dir>/config. If no config
directory is supplied, the default is:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Platform β”‚ Default config file β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Linux/macOS β”‚ T383838/etc/rsReticulum/config, then T383838~/.config/rsReticulum/config, then T383838~/.rsReticulum/c… β”‚
β”‚ Windows β”‚ T383838%APPDATA%rsReticulumconfig β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Generate the annotated starter file:

T282828
rnsd-rs --exampleconfig

Minimal TCP client example:

T282828
Tff7b72[reticulum]
Te6edf3share_instance Tff7b72= Ta5d6ffyes
Te6edf3instance_control_socket Tff7b72= Ta5d6ffyes
Te6edf3enable_transport Tff7b72= Ta5d6ffno

Tff7b72[interfaces]

Tff7b72[[Default TCP]]
Te6edf3type Tff7b72= Ta5d6ffTCPClientInterface
Te6edf3enabled Tff7b72= Ta5d6ffyes
Te6edf3target_host Tff7b72= Ta5d6ffrns.ratspeak.org
Te6edf3target_port Tff7b72= Ta5d6ff4242


Existing Python Reticulum configs should work if every requested interface
is implemented here. Unknown or not-yet-wired interfaces should be removed or
disabled until support lands.

The default shared-instance data/control ports are T38383837428/T38383837429. Ratspeak
uses app-private T38383837430/T38383837431 ports. If you run two daemons at the same
time, give one config a distinct port pair to avoid confliction, like:

T282828
Tff7b72[reticulum]
Te6edf3shared_instance_port Tff7b72= Ta5d6ff37432
Te6edf3instance_control_port Tff7b72= Ta5d6ff37433


Interface Support

Note: This is alpha, if something doesn't work, open an issue with enough context/information to help contribute to fixing it.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Interface β”‚ Current behavior β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ TCP client/server β”‚ Config-backed IPv4 and IPv6 paths. β”‚
β”‚ UDP β”‚ Config-backed unicast and multicast paths. β”‚
β”‚ Auto β”‚ Config-backed UDP discovery plus TCP fallback. β”‚
β”‚ Local shared instance β”‚ Config-backed TCP loopback or Unix socket depend… β”‚
β”‚ I2P β”‚ Config-backed SAM v3.1 path. β”‚
β”‚ Pipe β”‚ Config-backed subprocess stdio pipe. β”‚
β”‚ Backbone β”‚ Config-backed high-latency WAN-style tunnel. β”‚
β”‚ Serial, KISS, RNode, RNode Multi, AX.25 KISS β”‚ Config-backed with the T383838serial feature. β”‚
β”‚ BLE RNode β”‚ Config-backed with the T383838ble feature. β”‚
β”‚ Bluetooth Peer β”‚ Runtime API used by Ratspeak. β”‚
β”‚ Android USB-OTG β”‚ Runtime API for Android app embeddings. β”‚
β”‚ Weave β”‚ Not implemented. β”‚
β”‚ Bluetooth Classic RFCOMM β”‚ Not implemented. β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Compatibility Notes

Most daemon and utility flows are implemented for the public T383838*-rs tools:
T383838rnsd-rs, T383838rnstatus-rs, T383838rnpath-rs, T383838rnid-rs, T383838rnprobe-rs, T383838rncp-rs,
T383838rnsh-rs, and T383838rnodeconf-rs.

The current compatibility target is Reticulum 1.2.4 where the matching Rust
surface is implemented and tested. T383838rnid-rs has explicit 1.2.4 coverage for
the normal identity utility flow.

Known gaps and intentional limits:

β€’ T383838rnx, T383838rnir, T383838rnpkg, T383838rngit, and T383838git-remote-rns are not implemented. There is on-going work in progress for supporting these.
β€’ T383838rnodeconf-rs is partial; safe inspection/configuration and EEPROM
dump/backup are furthest along. Firmware flashing, autoinstall/update, ROM
bootstrap, destructive EEPROM wipe, and full signing-key management are not
implemented.
β€’ T383838rnstatus-rs covers the practical operator surface, but does not implement
every display/API behavior from upstream.
β€’ T383838rnpath-rs remote mode is read-only for table/rates, including destination
filters, apart from the remote blackhole-list query path. Remote mutations
and remote active path requests are full gaps.
β€’ T383838rncp-rs implements the listener T383838-b announce interval. T383838-P/--phy-rates
is not supported for the time being.
β€’ T383838rns-ratkey hardware identity support is feature-gated and still has known
hardware-verification gaps before it should be described as release-ready.

Contributing

If the issue or contribution belongs upstream as well, start there. Python LXMF
and Reticulum remain the reference implementations.

PRs are closed for now until I have time to catch up on everything. I'm tired.

License

GNU Affero General Public License v3.0 or later. See LICENSE.

Served by rngit 1.4.2 - Generated in 0.17s